home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / wais / ui / question.c < prev    next >
C/C++ Source or Header  |  1995-05-09  |  5KB  |  218 lines

  1. /* 
  2.   WIDE AREA INFORMATION SERVER SOFTWARE:
  3.    No guarantees or restrictions.  See the readme file for the full standard
  4.    disclaimer.
  5.  
  6.    This is part of the shell user-interface tools for the WAIS software.
  7.    Do with it as you please.
  8.  
  9.    jonathan@Think.COM
  10.  *
  11.  * $Log:    question.c,v $
  12.  * Revision 1.4  92/03/17  14:38:24  jonathan
  13.  * Rename from qread.  This is more like source.c now.  For use with X
  14.  * interface.
  15.  * 
  16.  */
  17.  
  18. #ifndef lint
  19. static char *RCSid = "$Header: /tmp_mnt/net/quake/proj/wais/wais-8-b5/ui/RCS/question.c,v 1.4 92/03/17 14:38:24 jonathan Exp $";
  20. #endif
  21.  
  22. #define _C_QREAD
  23.  
  24. #include "wais.h"
  25. #include "globals.h"
  26.  
  27. short readRect(question, file)
  28. Question question;
  29. FILE *file;
  30. {
  31.   char temp_string[MAX_SYMBOL_SIZE];
  32.   short check_result;
  33.   long left, right, top, bottom;
  34.  
  35.   check_result = CheckStartOfStruct("rect", file);
  36.   if(FALSE == check_result){ 
  37.     return(false);
  38.   }
  39.   if(END_OF_STRUCT_OR_LIST == check_result)
  40.     {
  41.       return(FALSE);
  42.     }
  43.     
  44.   /* read the slots: */
  45.   while(TRUE){
  46.     short check_result = ReadSymbol(temp_string, file, MAX_SYMBOL_SIZE);
  47.     if(END_OF_STRUCT_OR_LIST == check_result) break;
  48.     if(FALSE == check_result){
  49.       return(false);
  50.     } 
  51.     if(0 == strcmp(temp_string, ":left")) {
  52.       if (FALSE == ReadLong(file, &left))
  53.     return(false);
  54.     }
  55.     else if(0 == strcmp(temp_string, ":right")) {
  56.       if (FALSE == ReadLong(file, &right))
  57.     return(false);
  58.     }
  59.     else if(0 == strcmp(temp_string, ":top")) {
  60.       if (FALSE == ReadLong(file, &top))
  61.     return(false);
  62.     }
  63.     else if(0 == strcmp(temp_string, ":bottom")) {
  64.       if (FALSE == ReadLong(file, &bottom))
  65.     return(false);
  66.     }
  67.     else
  68.       SkipObject(file);
  69.   }
  70.   return(TRUE);
  71. }
  72.  
  73. short ReadQuestion(question, file)
  74. Question question;
  75. FILE *file;
  76. {
  77.   char temp_string[5000];
  78.   short check_result;
  79.  
  80.   long version;
  81.  
  82.   /* make sure it's a question */
  83.   
  84.   check_result = CheckStartOfStruct("question", file);
  85.   if(FALSE == check_result){ 
  86.     return(false);
  87.   }
  88.   if(END_OF_STRUCT_OR_LIST == check_result)
  89.     {
  90.       return(FALSE);
  91.     }
  92.     
  93.   /* clear stuff */
  94.   freeSourceList(question->Sources);
  95.   question->Sources = NULL;
  96.  
  97.   freeDocList(question->RelevantDocuments);
  98.   question->RelevantDocuments = NULL;
  99.  
  100.   freeDocList(question->ResultDocuments);
  101.   question->ResultDocuments = NULL;
  102.  
  103.   strcpy(question->keywords, "");
  104.  
  105.   /* read the slots: */
  106.   while(TRUE){
  107.     short check_result = ReadSymbol(temp_string, file, MAX_SYMBOL_SIZE);
  108.     if(END_OF_STRUCT_OR_LIST == check_result) break;
  109.     if(FALSE == check_result){
  110.       return(false);
  111.     } 
  112.  
  113. #ifdef DEBUG
  114.     fprintf(stderr, "Question slot: '%s'\n", temp_string); /* for debugging */
  115. #endif
  116.  
  117.     if(0 == strcmp(temp_string, ":version")) {
  118.       if(FALSE == ReadLong(file, &version))
  119.     return(false);
  120.       question->version = (short)version;
  121.     }
  122.     else if(0 == strcmp(temp_string, ":sort-results-by")) {
  123.       SkipObject(file);
  124.     }
  125.     else if(0 == strcmp(temp_string, ":window-geometry")) {
  126.       SkipObject(file);
  127.     }
  128.     else if(0 == strcmp(temp_string, ":seed-words")) {
  129.       if(FALSE == ReadString(temp_string, file, 5000))
  130.     return(false);
  131.       strcpy(question->keywords, temp_string);
  132.     }
  133.     else if(0 == strcmp(temp_string, ":relevant-documents")) {
  134.       freeDocList(question->RelevantDocuments);
  135.       question->RelevantDocuments = ReadListOfDocuments(file);
  136.     }
  137.     else if(0 == strcmp(temp_string, ":sources")) {
  138.       freeSourceList(question->Sources);
  139.       question->Sources = ReadListOfSources(file);
  140.     }
  141.     else if(0 == strcmp(temp_string, ":result-documents")) {
  142.       freeDocList(question->ResultDocuments);
  143.       question->ResultDocuments = ReadListOfDocuments(file);
  144.     }
  145.     else
  146.       SkipObject(file);
  147.   }
  148.  
  149.   return(TRUE);
  150. }
  151.  
  152. void WriteQuestionfp(fp, question)
  153. FILE *fp;
  154. Question question;
  155. {
  156.   DocList doc;
  157.   SourceList sources;
  158.  
  159.   WriteNewline(fp);
  160.   WriteStartOfStruct("question", fp);
  161.   WriteNewline(fp);
  162.   WriteSymbol(":version", fp);
  163.   WriteLong(2, fp);
  164.   WriteNewline(fp);
  165.   WriteSymbol(":seed-words", fp);
  166.   WriteString(question->keywords, fp);
  167.   WriteNewline(fp);
  168.   WriteSymbol(":relevant-documents", fp);
  169.   WriteNewline(fp);
  170.   WriteStartOfList(fp);
  171.   for(doc = question->RelevantDocuments; doc != NULL; doc = doc->nextDoc)
  172.     WriteDocument(doc->thisDoc, fp);
  173.   WriteEndOfList(fp);
  174.   WriteNewline(fp);
  175.   WriteSymbol(":sources", fp);
  176.   WriteNewline(fp);
  177.   WriteStartOfList(fp);
  178.   for(sources = question->Sources; sources != NULL; sources = sources->nextSource) {
  179.     WriteStartOfStruct("source-id", fp);
  180.     WriteNewline(fp);
  181.     WriteSymbol(":filename", fp);
  182.     WriteString(sources->thisSource->filename, fp);
  183.     WriteNewline(fp);
  184.     WriteEndOfStruct(fp);
  185.   }
  186.   WriteNewline(fp);
  187.   WriteEndOfList(fp);
  188.   WriteNewline(fp);
  189.   WriteSymbol(":result-documents", fp);
  190.   WriteNewline(fp);
  191.   WriteStartOfList(fp);
  192.   for(doc = question->ResultDocuments; doc != NULL; doc = doc->nextDoc)
  193.     WriteDocument(doc->thisDoc, fp);
  194.   WriteEndOfList(fp);
  195.   WriteNewline(fp);
  196.   WriteEndOfList(fp);
  197. }
  198.  
  199. void WriteQuestion(filename, question)
  200. char *filename;
  201. Question question;
  202. {
  203.   FILE *fp;
  204.  
  205.   /* test to see if it exists */
  206.  
  207.   if ((fp = fopen(filename, "w")) == NULL) {
  208.     char outstring[STRINGSIZE];
  209.     sprintf(outstring, "Error opening %s.\n", filename);
  210.     PrintStatus(outstring);
  211.     return;
  212.   }
  213.   
  214.   WriteQuestionfp(fp, question);
  215.   fclose(fp);
  216.   question->modified = FALSE;
  217. }
  218.